package com.kc.muzi102.midautumnandroid

import android.app.Application
import com.allen.library.RxHttpUtils
import com.allen.library.config.OkHttpConfig
import com.allen.library.cookie.store.SPCookieStore
import com.allen.library.interfaces.BuildHeadersListener
import com.allen.library.manage.RxUrlManager
import com.kc.muzi102.midautumnandroid.api.AppUrlConfig
import okhttp3.OkHttpClient
import java.util.*

/**
 * *******************************************************************************************
 * 修改日期                         修改人             任务名称                 功能或Bug描述
 * 2019/9/10                        MUZI102
 * *******************************************************************************************
 */
@Suppress("UNREACHABLE_CODE")
class BaseApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        initRxHttpUtils()
    }

    fun initRxHttpUtils() {
//        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        //一个项目多url的配置方法
        RxUrlManager.getInstance().setMultipleUrl(AppUrlConfig.getAllUrl())

        RxHttpUtils
            .getInstance()
            .init(this)
            .config()
            //自定义factory的用法
            //.setCallAdapterFactory(RxJava2CallAdapterFactory.create())
            //.setConverterFactory(ScalarsConverterFactory.create(),GsonConverterFactory.create(GsonAdapter.buildGson()))
            //配置全局baseUrl
            .setBaseUrl("https://www.wanandroid.com/")
            //开启全局配置
            .setOkClient(createOkHttp())

//        TODO: 2018/5/31 如果以上OkHttpClient的配置满足不了你，传入自己的 OkHttpClient 自行设置
//        OkHttpClient.Builder builder = new OkHttpClient.Builder();
//
//        builder
//                .addInterceptor(log_interceptor)
//                .readTimeout(10, TimeUnit.SECONDS)
//                .writeTimeout(10, TimeUnit.SECONDS)
//                .connectTimeout(10, TimeUnit.SECONDS);
//
//        RxHttpUtils
//                .getInstance()
//                .init(this)
//                .config()
//                .setBaseUrl(BuildConfig.BASE_URL)
//                .setOkClient(builder.build());

    }

    private fun createOkHttp(): OkHttpClient {
//        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        return OkHttpConfig
            .Builder(this)
            .setHeaders(BuildHeadersListener {
                var map = HashMap<String, String>()
                map["appVersion"] = BuildConfig.VERSION_NAME
//                map["client"] = "android"
//                map["token"] = "token"
//                map["other_header"] = URLEncoder.encode("中文需要转码")
                map
            })
            .setCache(true)
            .setHasNetCacheTime(10)//默认有网络时候缓存60秒
            //全局持久话cookie,保存到内存（new MemoryCookieStore()）或者保存到本地（new SPCookieStore(this)）
            //不设置的话，默认不对cookie做处理
            .setCookieType(SPCookieStore(this))
            //可以添加自己的拦截器(比如使用自己熟悉三方的缓存库等等)
            //.setAddInterceptor(null)
            //全局ssl证书认证
            //1、信任所有证书,不安全有风险（默认信任所有证书）
            //.setSslSocketFactory()
            //2、使用预埋证书，校验服务端证书（自签名证书）
            //.setSslSocketFactory(cerInputStream)
            //3、使用bks证书和密码管理客户端证书（双向认证），使用预埋证书，校验服务端证书（自签名证书）
            //.setSslSocketFactory(bksInputStream,"123456",cerInputStream)
            //设置Hostname校验规则，默认实现返回true，需要时候传入相应校验规则即可
            //.setHostnameVerifier(null)
            //全局超时配置
            .setReadTimeout(10)
            //全局超时配置
            .setWriteTimeout(10)
            //全局超时配置
            .setConnectTimeout(10)
            //全局是否打开请求log日志
            .setDebug(BuildConfig.DEBUG)
            .build()
    }

}
